import { customRef, ref } from 'vue'

/**
 *因为收藏功能多个页面都需要使用,所以需要封装
  写法参照小菠萝! 这里的type设置默认值 为doc 也就是doc医生
 */
const res = ref(100)
console.log(res.value)
// export const useFollow = (type: Follow = 'doc') => {
//   const loading = ref(false)
//   // 点击关注按钮
//   const follow = async (item: { id: string; likeFlag: 0 | 1 }) => {
//     try {
//       loading.value = true
//       await reqGetFollow(item.id, type)
//       // 修改显示状态
//       item.likeFlag = item.likeFlag === 1 ? 0 : 1
//     } finally {
//       // 不论成功还是失败都关闭loading
//       loading.value = false
//     }
//   }
//   return {
//     loading,
//     follow
//   }
// }

// // ts的类型兼容 ->多的可以给少的
// type Obj = {
//   name: string
//   id: string
// }
// const getUser = (params: Obj) => {
//   console.log(params)
// }

// const obj = { name: 'zs', id: 'xxx', age: 20 }
// const resObj = { name: 'ls' }
// // getUser(resObj) // 报错 少的不能给多的 => 缺少类型参数
// getUser(obj) // 多的可以给少的 =>需要单独定义一个对象,只要存在类型参数就不会报错

/**
 * customRef用法 防抖函数
 * @param value 输入的表单值
 * @param delay 节流时间
 */
export function useDebouncedRef<T>(value: T, delay: number = 500) {
  let timeout: any
  return customRef((track, trigger) => {
    return {
      get() {
        track()
        return value
      },
      set(newValue) {
        clearTimeout(timeout)
        timeout = setTimeout(() => {
          value = newValue
          timeout = null
          trigger()
        }, delay)
      }
    }
  })
}

/**
 * // 调用方法
const res = useDebouncedRef<number>(msg.value,500)
const onInput = () => {
  // 验证测试customRef方法
  res.value = msg.value
}
 */
